/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package Traceability.impl;

import Traceability.AbstractionLevel;
import Traceability.Aspect;
import Traceability.LinkMode;
import Traceability.TechnicalBinding;
import Traceability.TraceLink;
import Traceability.TraceabilityPackage;
import Traceability.TransformationLanguage;

import java.util.Collection;
import java.util.Date;

import org.eclipse.emf.common.notify.Notification;

import org.eclipse.emf.common.util.EList;

import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;

import org.eclipse.emf.internal.cdo.CDOObjectImpl;
import org.eclipse.emf.ecore.impl.ENotificationImpl;
import org.eclipse.emf.ecore.impl.EObjectImpl;

import org.eclipse.emf.ecore.util.EObjectResolvingEList;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model object '<em><b>Trace Link</b></em>'.
 * <!-- end-user-doc -->
 * <p>
 * The following features are implemented:
 * <ul>
 *   <li>{@link Traceability.impl.TraceLinkImpl#getCreatedOn <em>Created On</em>}</li>
 *   <li>{@link Traceability.impl.TraceLinkImpl#getSourceElements <em>Source Elements</em>}</li>
 *   <li>{@link Traceability.impl.TraceLinkImpl#getMode <em>Mode</em>}</li>
 *   <li>{@link Traceability.impl.TraceLinkImpl#getComment <em>Comment</em>}</li>
 *   <li>{@link Traceability.impl.TraceLinkImpl#getTechnicalBinding <em>Technical Binding</em>}</li>
 *   <li>{@link Traceability.impl.TraceLinkImpl#getAspect <em>Aspect</em>}</li>
 * </ul>
 * </p>
 *
 * @generated
 */
public abstract class TraceLinkImpl extends CDOObjectImpl implements TraceLink {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	protected TraceLinkImpl() {
		super();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected EClass eStaticClass() {
		return TraceabilityPackage.Literals.TRACE_LINK;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@Override
	protected int eStaticFeatureCount() {
		return 0;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Date getCreatedOn() {
		return (Date)eGet(TraceabilityPackage.Literals.TRACE_LINK__CREATED_ON, true);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setCreatedOn(Date newCreatedOn) {
		eSet(TraceabilityPackage.Literals.TRACE_LINK__CREATED_ON, newCreatedOn);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	@SuppressWarnings("unchecked")
	public EList<EObject> getSourceElements() {
		return (EList<EObject>)eGet(TraceabilityPackage.Literals.TRACE_LINK__SOURCE_ELEMENTS, true);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public LinkMode getMode() {
		return (LinkMode)eGet(TraceabilityPackage.Literals.TRACE_LINK__MODE, true);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setMode(LinkMode newMode) {
		eSet(TraceabilityPackage.Literals.TRACE_LINK__MODE, newMode);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public String getComment() {
		return (String)eGet(TraceabilityPackage.Literals.TRACE_LINK__COMMENT, true);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setComment(String newComment) {
		eSet(TraceabilityPackage.Literals.TRACE_LINK__COMMENT, newComment);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public TechnicalBinding getTechnicalBinding() {
		return (TechnicalBinding)eGet(TraceabilityPackage.Literals.TRACE_LINK__TECHNICAL_BINDING, true);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setTechnicalBinding(TechnicalBinding newTechnicalBinding) {
		eSet(TraceabilityPackage.Literals.TRACE_LINK__TECHNICAL_BINDING, newTechnicalBinding);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Aspect getAspect() {
		return (Aspect)eGet(TraceabilityPackage.Literals.TRACE_LINK__ASPECT, true);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void setAspect(Aspect newAspect) {
		eSet(TraceabilityPackage.Literals.TRACE_LINK__ASPECT, newAspect);
	}

} //TraceLinkImpl
